# 如果我想要在终端以脚本的方式启动这个文件，而这个脚本需要django的环境
# 1:所以需要提前加载django环境,但是有个问题，'meiduo_mall.settings.dev'这个目录默认在这个文件下找meiduo_mall
# 所以需要指定基准目录
#  以当前目录为基准找到外层目录：
import os
import sys
from django.template import loader


BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE_DIR)

# 由于当前脚本依赖django环境，所以需要提前加载django环境
# 1、设置django环境变量指定配置文件路径
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'shopping_mall.settings.dev')
# 2、手动加载Django环境
import django
django.setup()

from django.conf import settings
from apps.goods.utils import *


def generate_static_sku_detail_html(sku_id):
    categories = get_categories()
    goods, sku, specs = get_goods_and_spec(sku_id)

    # 1:使用get_template函数获取模板页面对象
    template = loader.get_template('detail.html')
    # 2：构造动态数据
    context = {
        'categories': categories,
        'goods': goods,  # 当前sku从属的spu
        'specs': specs,  # 规格和选项信息
        'sku': sku  # 当前sku商品对象
    }
    # 3：渲染页面
    page = template.render(context)

    # 4：将页面重新写入静态文件
    # settings.STATIC_FILE_PATH --> 是front_end_pc文件夹路径
    file_path = os.path.join(
        settings.STATIC_FILE_PATH,
        'goods/%d.html' % sku_id,  # 'goods/1.html'
    )

    with open(file_path, 'w') as f:
        f.write(page)


if __name__ == '__main__':
    from apps.goods.models import SKU

    # 在SKU表中查看所有没有过期的sku
    skus = SKU.objects.filter(is_launched=True)
    # 循环遍历skus
    for sku in skus:
        generate_static_sku_detail_html(sku.id)